# user：hp
# web自动化阶段 2022/6/3
# 时间 13:17

"""数据库操作api"""
import pymysql
from config import MYSQL
from utility.log_ import GetLog

logger = GetLog.get_logger()


class MysqlApi:
    __database = None

    # 构造
    def __init__(self):
        if not self.__database:
            try:
                # 打开数据库
                self.__database = pymysql.connect(**MYSQL)
                # 获取游标
                self.__cursor = self.__database.cursor()
                logger.info('数据库初始化成功')
            except Exception as e:
                logger.error("数据库初始化失败：{}".format(e))
                raise

    # 查
    def select(self, sql, n=None):
        """
        数据库查询
        :param sql: sql语句
        :param n: 查询个数（默认单个
        :return: 查询结果
        """
        try:
            # 执行sql语句
            self.__cursor.execute(sql)
            # 获取执行结果
            if n is None:
                res = self.__cursor.fetchone()
            else:
                res = self.__cursor.fetchmany(n)
            # 查看结果
            logger.info("数据库查询成功{}".format(res))
            # 返回查询结果
            if res:
                return res
            raise '查询不到该数据'
        except Exception as e:
            # 打印错误信息
            logger.error("查询失败，错误信息：{}".format(e))
            # 回滚
            self.__database.rollback()

    # uid（增删改)
    def uid(self, sql):
        """
        数据库增删改
        :param sql:sql语句
        :return: bool值
        """
        try:
            # 执行sql
            self.__cursor.execute(sql)
            # 提交事务
            self.__database.commit()
            # 提交成功
            logger.info("数据库增删改操作成功")
            return True
        except Exception as e:
            # 打印错误信息
            logger.error("增删改失败，错误信息：{}".format(e))
            # 错误回滚
            self.__database.rollback()
            return False

    # 析构
    def __del__(self):
        if self.__database:
            # 关闭游标
            self.__cursor.close()
            # 关闭数据库
            self.__database.close()
            # self.__database=None
        print("数据库关闭成功")


if __name__ == '__main__':
    mysql = MysqlApi()
    a = mysql.select('select id from bs_user where username="小猪佩奇"')
    # mysql.quit_database()
    mysql1 = MysqlApi()
